export default {
  /**
   * 根据2个点获得方位角
   * @param 起点{lng: number, lat: number}
   * @param 终点 {lng: number, lat: number}
   * @return number
   * */
  getAzimuth (start, end) {
    const x1 = start.lng
    const y1 = start.lat
    const x2 = end.lng
    const y2 = end.lat
    const pi = Math.PI
    const w1 = y1 / 180 * pi
    const j1 = x1 / 180 * pi
    const w2 = y2 / 180 * pi
    const j2 = x2 / 180 * pi
    let ret = null
    if (j1 === j2) {
      if (w1 > w2) { // 北半球的情况，南半球忽略
        return 270
      } else if (w1 < w2) {
        return 90
      } else { // 位置完全相同
        return -1
      }
    }

    ret = 4 * Math.pow(Math.sin((w1 - w2) / 2), 2) - Math.pow(Math.sin((j1 - j2) / 2) * (Math.cos(w1) - Math.cos(w2)), 2)
    ret = Math.sqrt(ret)
    let temp = (Math.sin(Math.abs(j1 - j2) / 2) * (Math.cos(w1) + Math.cos(w2)))
    ret = ret / temp
    ret = Math.atan(ret) / pi * 180
    if (j1 > j2) { // 1为参考点坐标
      if (w1 > w2) ret += 180
      else ret = 180 - ret
    } else if (w1 > w2) ret = 360 - ret
    return ret
  },
  /**
   * 获取方向
   * @param 起点{lng: number, lat: number}
   * @param 终点 {lng: number, lat: number}
   * @return string
   * */
  getDirection (start, end) {
    let azimuth = this.getAzimuth(start, end)
    if ((azimuth <= 10) || (azimuth > 350)) return '东'
    if ((azimuth > 10) && (azimuth <= 80)) return '东北'
    if ((azimuth > 80) && (azimuth <= 100)) return '北'
    if ((azimuth > 100) && (azimuth <= 170)) return '西北'
    if ((azimuth > 170) && (azimuth <= 190)) return '西'
    if ((azimuth > 190) && (azimuth <= 260)) return '西南'
    if ((azimuth > 260) && (azimuth <= 280)) return '南'
    if ((azimuth > 280) && (azimuth <= 350)) return '东南'

    return ''
  }
}
